#pragma once

#include<unistd.h>
#include<cstdlib>
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include"log.hpp"
#include"err.hpp"

void Daemon()
{
    //1.忽略信号
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);
    //2.父进程退出 setsid不能由组长调用
    if(fork()>0) exit(0);
    //3.新建会话
    pid_t ret=setsid();
    if((int)ret==-1)
    {
        logMessage(Fatal,"daemon error,code:%d,string:%s",errno,strerror(errno));
        exit(SETSID_ERR);
    }
    //4.（可选）工作路径改变  chdir("/")
    //5.处理0，1，2 标准输入输出错误
    int fd=open("/dev/null",O_RDWR);
    if(fd<0)
    {
        logMessage(Fatal,"open error,code:%d,string:%s",errno,strerror(errno));
        exit(OPEN_ERR);
    }
    dup2(fd,0);//重定向
    dup2(fd,1);
    dup2(fd,2);
    close(fd);

}